package demo2.mapper;

import demo2.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * @Author quan
 * @Description 定义接口并实现
 * @Date 2023/7/22 21:49
 */

@Mapper
public interface UserMapper {
    //定义接口：查询数据库内容
    /**
     * 查询所有内容
     * @return 返回数据库中的所有用户
     */
    public abstract List<User> queryAll();

    /**
     * 根据Id查询用户
     * @return 返回符合条件大用户
     */
    //(1)当只有一个参数的时候，可以加注解也可以不加：加注解的话：@Param("uid")，xml文件也叫uid要对应。
//    public abstract User queryById(@Param("uid") Integer id);
    //(2)当只有一个参数的时候，如果不加注解@Param，此时的Integer后的参数名叫什么都行，可以与xml文件中的where id = 后的参数名不对应
//    public abstract User queryById(Integer aaa);
    public abstract User queryById(Integer id);
    //(3)当有多个参数的时候，就得加注解@Param

    /**
     * 增加：插入一个对象：也就是一条记录
     * @param user 插入对象
     * @return 返回受影响的行数
     */
    public abstract Integer insert(User user);
    //加注解
    public abstract Integer insert1(@Param("aaa") User user);
    //获取自增id
    public abstract Integer insert2(@Param("userinfo")User user);

    /**
     * 修改用户内容：加注解的方式
     * @param user
     */
//    void update(@Param("ccc") User user);
    //不加注解
    void update(User user);

    /**
     * 根据主键删除id:没有加注解
     * @param id
     */
//    void delete(Integer Id);
    //加注解的方式
    void delete(@Param("aaa") Integer id);

    /**
     * 根据姓名查询用户
     * @param name 要查询的姓名
     * @return 返回对应的用户类型
     */
    User queryByName(String name);

    /**
     * 演示SQL注入：用户登录演示
     * @param username 用户名
     * @param password 密码
     * @return  通过username和password来查询用户
     */
    User queryByNameAndPassword(@Param("username") String username,@Param("password") String password);

    /**
     * 按照顺序查找用户:排序只能用$，使用#会报错
     * @return 返回用户列表
     */
    List<User> queryByOrder(String order);

    /**
     * like要用mysql内置函数concat(字符串直接替换)，使用#会报错
     * @param name
     * @return
     */
    List<User> queryByLike(String name);
}
